#[test]
fn test_longest_valid_parentheses() {
    assert_eq!(longest_valid_parentheses(String::from("(()")), 2);
    assert_eq!(longest_valid_parentheses(String::from(")()())")), 4);
    assert_eq!(longest_valid_parentheses(String::from(")()()())")), 6);
    assert_eq!(longest_valid_parentheses(String::from("()(())")), 6);
    assert_eq!(longest_valid_parentheses(String::from("")), 0);
}

/*
32. 最长有效括号
给你一个只包含 '(' 和 ')' 的字符串，找出最长有效（格式正确且连续）括号子串的长度。

示例 1：
输入：s = "(()"
输出：2
解释：最长有效括号子串是 "()"

示例 2：
输入：s = ")()())"
输出：4
解释：最长有效括号子串是 "()()"

示例 3：
输入：s = ""
输出：0

提示：
0 <= s.length <= 3 * 104
s[i] 为 '(' 或 ')'
 */
pub fn longest_valid_parentheses(s: String) -> i32 {
    let mut stack = vec![];
    let mut carry = -1;

    s.bytes().enumerate().fold(0, |acc, (i, c)| match c {
        b'(' => {
            stack.push(carry);
            carry = i as i32;
            acc
        }
        _ => {
            if let Some(last) = stack.pop() {
                carry = last;
                acc.max(i as i32 - last)
            } else {
                carry = i as i32;
                acc
            }
        }
    })
}
